package com.cnap.multiclouldmgmt.model.k8sMonitorModels;

import com.cnap.multiclouldmgmt.model.K8sClusterInfoModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import java.util.List;
/**
 * 监控或者算法需要的数据
 * @author dyq
 */
@ApiModel(value = "com.cnap.multiclouldmgmt.model.k8sMonitorModels.K8sClusterCostAlgInfoModel",description = "成本算法所需要的集群的参数")
public class K8sClusterCostAlgInfoModel extends K8sClusterInfoModel {

    //集群内工作节点的总数,也即下面所有类型的节点数量之和
    @ApiModelProperty(value = "集群内工作节点的总数,也即下面所有类型的节点数量之和")
    private int nodeNum;

    //集群内CPU类型节点的总数
    @ApiModelProperty(value = "集群内CPU类型节点的总数")
    private int cpuNodeNum;

    //集群内FPGA类型节点的总数
    @ApiModelProperty(value = "集群内FPGA类型节点的总数")
    private int fpgaNodeNum;

    //集群内GPU类型节点的总数
    @ApiModelProperty(value = "集群内GPU类型节点的总数")
    private int gpuNodeNum;

    //集群内剩余可用的CPU核数
    @ApiModelProperty(value = "集群内剩余可用的CPU核数")
    private double residualCpuNum;
    
    //集群内剩余可用的运行内存数
    @ApiModelProperty(value = "集群内剩余可用的运行内存数")
    private double residualRam;

    //集群内剩余可用的GPU数
    @ApiModelProperty(value = "集群内剩余可用的GPU数")
    private double residualGpu;

    //集群内剩余可用的FPGA数
    @ApiModelProperty(value = "集群内剩余可用的FPGA数")
    private double residualFpga;

    //集群内剩余可用的块存储容量
    @ApiModelProperty(value = "集群内剩余可用的块存储容量")
    private double residualBs;

    //集群内剩余可用的文件存储容量
    @ApiModelProperty(value = "集群内剩余可用的块存储容量")
    private double residualFs;

    //集群出口的剩余带宽,不接入sdwan之前没法获取，先自己写一个很大的
    @ApiModelProperty(value = "集群出口的剩余带宽")
    private int residualNr = Integer.MAX_VALUE/2;

    // 集群内CPU节点的每小时平均成本， 单位：元/小时
    @ApiModelProperty(value = " 集群内CPU节点的每小时平均成本， 单位：元/小时")
    private double pricePerCpuWorker;

    // 集群内FPGA节点的每小时平均成本， 单位：元/小时
    @ApiModelProperty(value = " 集群内FPGA节点的每小时平均成本， 单位：元/小时")
    private double pricePerFpgaWorker;

    //集群内GPU节点的每小时平均成本， 单位：元/小时 集群内CPU节点的每小时平均成本， 单位：元/小时
    @ApiModelProperty(value = " 集群内Gpu节点的每小时平均成本， 单位：元/小时")
    private double pricePerGpuWorker;

    //集群内块存储资源的每小时平均成本， 单位：元/GB小时
    @ApiModelProperty(value = " 集群内块存储资源的每小时平均成本， 单位：元/GB小时")
    private double pricePerBs;

    //集群内文件存储资源的每小时平均成本， 单位：元/GB小时
    @ApiModelProperty(value = "集群内文件存储资源的每小时平均成本， 单位：元/GB小时")
    private double pricePerFs;

    //集群公网出口网络资源的计费方式，按流量计费或按固定带宽计费， 单位：字符串 可选"Flow" 或 "Bandwidth"
    @ApiModelProperty(value = "集群公网出口网络资源的计费方式，按流量计费或按固定带宽计费， 单位：字符串 可选\"Flow\" 或 \"Bandwidth\"")
    private String priceModelNr;

    //集群公网出口网络资源的成本，若为按流量计费，则单位为 元/GB/小时；若为按固定带宽计费，则单位为 元/Mbps/小时
    @ApiModelProperty(value = "集群公网出口网络资源的成本，若为按流量计费，则单位为 元/GB/小时；若为按固定带宽计费，则单位为 元/Mbps/小时")
    private double pricePerNr;

    //群节点的情况
    @ApiModelProperty(value = "群节点的情况")
    private List<NodeCostAlgInfoModel> nodeCostAlgInfoModels;

    /**
     * get
     *
     * @return NodeNum
     */
    public int getNodeNum() {
        return nodeNum;
    }

    /**
     * set
     *
     * @param nodeNum nodeNum
     */
    public void setNodeNum(int nodeNum) {
        this.nodeNum = nodeNum;
    }

    /**
     * get
     *
     * @return CpuNodeNum
     */
    public int getCpuNodeNum() {
        return cpuNodeNum;
    }

    /**
     * set
     *
     * @param cpuNodeNum cpuNodeNum
     */
    public void setCpuNodeNum(int cpuNodeNum) {
        this.cpuNodeNum = cpuNodeNum;
    }

    /**
     * get
     *
     * @return FpgaNodeNum
     */
    public int getFpgaNodeNum() {
        return fpgaNodeNum;
    }

    /**
     * set
     *
     * @param fpgaNodeNum fpgaNodeNum
     */
    public void setFpgaNodeNum(int fpgaNodeNum) {
        this.fpgaNodeNum = fpgaNodeNum;
    }

    /**
     * get
     *
     * @return GpuNodeNum
     */
    public int getGpuNodeNum() {
        return gpuNodeNum;
    }

    /**
     * set
     *
     * @param gpuNodeNum gpuNodeNum
     */
    public void setGpuNodeNum(int gpuNodeNum) {
        this.gpuNodeNum = gpuNodeNum;
    }

    /**
     * get
     *
     * @return ResidualCpuNum
     */
    public double getResidualCpuNum() {
        return residualCpuNum;
    }

    /**
     * set
     *
     * @param residualCpuNum residualCpuNum
     */
    public void setResidualCpuNum(double residualCpuNum) {
        this.residualCpuNum = residualCpuNum;
    }

    /**
     * get
     *
     * @return ResidualRam
     */
    public double getResidualRam() {
        return residualRam;
    }

    /**
     * set
     *
     * @param residualRam residualRam
     */
    public void setResidualRam(double residualRam) {
        this.residualRam = residualRam;
    }

    /**
     * get
     *
     * @return ResidualGpu
     */
    public double getResidualGpu() {
        return residualGpu;
    }

    /**
     * set
     *
     * @param residualGpu residualGpu
     */
    public void setResidualGpu(double residualGpu) {
        this.residualGpu = residualGpu;
    }

    /**
     * get
     *
     * @return ResidualFpga
     */
    public double getResidualFpga() {
        return residualFpga;
    }

    /**
     * set
     *
     * @param residualFpga residualFpga
     */
    public void setResidualFpga(double residualFpga) {
        this.residualFpga = residualFpga;
    }

    /**
     * get
     *
     * @return ResidualBs
     */
    public double getResidualBs() {
        return residualBs;
    }

    /**
     * set
     *
     * @param residualBs residualBs
     */
    public void setResidualBs(double residualBs) {
        this.residualBs = residualBs;
    }

    /**
     * get
     *
     * @return ResidualFs
     */
    public double getResidualFs() {
        return residualFs;
    }

    /**
     * set
     *
     * @param residualFs residualFs
     */
    public void setResidualFs(double residualFs) {
        this.residualFs = residualFs;
    }

    /**
     * get
     *
     * @return ResidualNr
     */
    public int getResidualNr() {
        return residualNr;
    }

    /**
     * set
     *
     * @param residualNr residualNr
     */
    public void setResidualNr(int residualNr) {
        this.residualNr = residualNr;
    }

    /**
     * get
     *
     * @return PricePerCpuWorker
     */
    public double getPricePerCpuWorker() {
        return pricePerCpuWorker;
    }

    /**
     * set
     *
     * @param pricePerCpuWorker pricePerCpuWorker
     */
    public void setPricePerCpuWorker(double pricePerCpuWorker) {
        this.pricePerCpuWorker = pricePerCpuWorker;
    }

    /**
     * get
     *
     * @return PricePerFpgaWorker
     */
    public double getPricePerFpgaWorker() {
        return pricePerFpgaWorker;
    }

    /**
     * set
     *
     * @param pricePerFpgaWorker pricePerFpgaWorker
     */
    public void setPricePerFpgaWorker(double pricePerFpgaWorker) {
        this.pricePerFpgaWorker = pricePerFpgaWorker;
    }

    /**
     * get
     *
     * @return PricePerGpuWorker
     */
    public double getPricePerGpuWorker() {
        return pricePerGpuWorker;
    }

    /**
     * set
     *
     * @param pricePerGpuWorker pricePerGpuWorker
     */
    public void setPricePerGpuWorker(double pricePerGpuWorker) {
        this.pricePerGpuWorker = pricePerGpuWorker;
    }

    /**
     * get
     *
     * @return PricePerBs
     */
    public double getPricePerBs() {
        return pricePerBs;
    }

    /**
     * set
     *
     * @param pricePerBs pricePerBs
     */
    public void setPricePerBs(double pricePerBs) {
        this.pricePerBs = pricePerBs;
    }

    /**
     * get
     *
     * @return PricePerFs
     */
    public double getPricePerFs() {
        return pricePerFs;
    }

    /**
     * set
     *
     * @param pricePerFs pricePerFs
     */
    public void setPricePerFs(double pricePerFs) {
        this.pricePerFs = pricePerFs;
    }

    /**
     * get
     *
     * @return PriceModelNr
     */
    public String getPriceModelNr() {
        return priceModelNr;
    }

    /**
     * set
     *
     * @param priceModelNr priceModelNr
     */
    public void setPriceModelNr(String priceModelNr) {
        this.priceModelNr = priceModelNr;
    }

    /**
     * get
     *
     * @return PricePerNr
     */
    public double getPricePerNr() {
        return pricePerNr;
    }

    /**
     * set
     *
     * @param pricePerNr pricePerNr
     */
    public void setPricePerNr(double pricePerNr) {
        this.pricePerNr = pricePerNr;
    }

    /**
     * get
     *
     * @return NodeCostAlgInfoModels
     */
    public List<NodeCostAlgInfoModel> getNodeCostAlgInfoModels() {
        return nodeCostAlgInfoModels;
    }

    /**
     * set
     *
     * @param nodeCostAlgInfoModels nodeCostAlgInfoModels
     */
    public void setNodeCostAlgInfoModels(List<NodeCostAlgInfoModel> nodeCostAlgInfoModels) {
        this.nodeCostAlgInfoModels = nodeCostAlgInfoModels;
    }
}
